package com.wlwx.simulator.util;

import java.time.LocalDate;
import java.time.LocalTime;

public class GenerateIdUtil {
    private static volatile short seq = 0;

    public synchronized static long generateMsgId(int code) {
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();

        // 24bit位 格式为MMDDHHMMSS
        byte month  = (byte) localDate.getMonth().getValue(); //4bit
        byte day    = (byte) localDate.getDayOfMonth();       //5bit
        byte hour   = (byte) localTime.getHour();             //5bit
        byte minute = (byte) localTime.getMinute();           //6bit
        byte second = (byte) localTime.getSecond();           //6bit

        long msgid = 0 | month;
        msgid = msgid << 5 | day;
        msgid = msgid << 5 | hour;
        msgid = msgid << 6 | minute;
        msgid = msgid << 6 | second;

        // 短信网关代码 22bit位
        msgid = msgid << 22 | code;

        // 序列号16bit位 顺序增加，步长为1，循环使用
        if(seq++ >= Short.MAX_VALUE) {
            seq = 0;
        }
        msgid = msgid << 16 | (seq++ & 0xFFFF);

        return msgid;

    }
}
